package ruteodosciudades.algoritmo.extra;

import java.util.LinkedList;
import java.util.List;
import ruteodosciudades.algoritmo.Dijkstra;

/**
 *
 * @author markos
 */
public class Nodo {
    public String name;
    public List<Arista> adj;    // Lista de nodos adyacentes
    public double dist;   // Costo del nodo inicial al actual g(n)
    private double distLineaRecta; // Costo del nodo actual al nodo meta h(n)
    public Nodo prev;   // Arista previa en el camino mas corto
    public int scratch;// Bandera
    private String idnodo;

    /***
     *
     * @return el valor de la F(n) del nodo, la cual consiste en la suma de las
     * funciones g(n) + h(n), cuyos valores son almacenados en el nodo.
     */
    public double getFnValue(){
        return dist + distLineaRecta;
    }

    public Nodo(){}
    public Nodo(String nm) {
        name = nm;
        adj = new LinkedList<Arista>();
        reset();
    }

    public double getDistLineaRecta() {
        return distLineaRecta;
    }

    public void setDistLineaRecta(double distLineaRecta) {
        this.distLineaRecta = distLineaRecta;
    }

    public Nodo(String nm, String id) {
        name = nm;
        adj = new LinkedList<Arista>();
        reset();
        idnodo = id;
    }

    public void reset() {
        dist = Dijkstra.INFINITY;
        prev = null;
        scratch = 0;
    }

    public List<Arista> getAdj() {
        return adj;
    }

    public void setAdj(List<Arista> adj) {
        this.adj = adj;
    }

    public double getDist() {
        return dist;
    }

    public void setDist(double dist) {
        this.dist = dist;
    }

    public String getIdnodo() {
        return idnodo;
    }

    public void setIdnodo(String idnodo) {
        this.idnodo = idnodo;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Nodo getPrev() {
        return prev;
    }

    public void setPrev(Nodo prev) {
        this.prev = prev;
    }

    public int getScratch() {
        return scratch;
    }

    public void setScratch(int scratch) {
        this.scratch = scratch;
    }

    @Override
    public String toString(){
        return "[ " + this.idnodo + " ] " + this.name + " : " + this.dist;
    }

    public boolean equals(Nodo n){
        return idnodo.equals(n.getIdnodo());
    }
}
